$(function () {
    // 需求1: 初始化文章分类列表;
    //    后面要用，添加/修改/删除完成后都要重新渲染，所以封装成函数！
    let layer = layui.layer;
    initArtCateList();
    // 封装
    function initArtCateList() {
        // 发送ajax
        axios({
            method: 'GET',
            url: '/my/article/cates'
        }).then((res) => {
            // console.log(res.data);
            if (res.data.status != 0) {
                return layer.msg(res.data.message);
            }
            // 定义数组，遍历元素
            let arr = [];
            res.data.data.forEach(ele => {
                if (ele.Id < 0) return;
                arr.push(`
                    <tr>
                        <td>${ ele.Id}</td>
                        <td>${ ele.name}</td>
                        <td>${ ele.alias}</td>
                        <td>
                            <button data-id="${ ele.Id}" class="btn-edit layui-btn layui-btn-xs">修改</button>
                            <button data-id="${ ele.Id}" class="btn-dele layui-btn layui-btn-xs layui-btn-danger">删除</button>
                        </td>
                    </tr>
                `);
            });
            // 循环完毕之后赋值，渲染
            $('tbody').empty().html(arr.join(''));
        });
    }

    // 需求2: 点击按钮，弹出层，构建form表单
    // 定义一个全局变量，记录弹出层的索引值
    let indexAdd = 0;
    $("#addBtn").on('click', function () {
        // 从layui的官方网站特殊定制一个弹出层！
        indexAdd = layer.open({
            type: 1,
            title: '添加文章分类',
            area: ['500px', '260px'],
            content: `
                <form id="addForm" class="layui-form" action="">
                    <!-- 1.分类名称 -->
                    <div class="layui-form-item">
                        <label class="layui-form-label">分类名称</label>
                        <div class="layui-input-block">
                            <input type="text" name="name" required lay-verify="required" placeholder="请输入分类名称" autocomplete="off" class="layui-input">
                        </div>
                    </div>
                    <!-- 2.分类别名 -->
                    <div class="layui-form-item">
                        <label class="layui-form-label">分类别名</label>
                        <div class="layui-input-block">
                            <input type="text" name="alias" required lay-verify="required" placeholder="请输入分类别名" autocomplete="off" class="layui-input">
                        </div>
                    </div>
                    <!-- 3.按钮 -->
                    <div class="layui-form-item">
                        <div class="layui-input-block">
                            <button class="layui-btn" lay-submit lay-filter="formDemo">确定添加</button>
                            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                        </div>
                    </div>
                </form>
            `
        });
    })

    // 需求3: 添加文章分类 - 动态添加的元素，需要使用事件委托/事件代理！
    $("body").on('submit', '#addForm', function (e) {
        // 阻止表单默认提交
        e.preventDefault();
        // ajax提交
        axios({
            method: 'POST',
            url: '/my/article/addcates',
            // 参数通过data属性，传递 a=1&b=2 类型数据
            data: $(this).serialize()
        }).then((res) => {
            if (res.data.status != 0) {
                return layer.msg(res.data.message);
            }
            // 提示成功
            layer.msg('恭喜您，添加文章分类成功！');
            // 重新发送ajax渲染文章分类列表
            initArtCateList();
            // 关闭弹出层
            layer.close(indexAdd);
        });
    })

    // 需求4: 修改文章分类弹窗和赋值 - 动态添加的元素，需要使用事件委托/事件代理！
    let indexEdit = 0;
    $('tbody').on('click', '.btn-edit', function () {
        // 赋值的添加表单弹出层，进行修改
        indexEdit = layer.open({
            type: 1,
            title: '修改文章分类',
            area: ['500px', '260px'],
            content: `
                <form lay-filter="editForm" id="editForm" class="layui-form" action="">
                    <!-- 0.隐藏域 Id -->
                    <input type="hidden" name="Id">
                    <!-- 1.分类名称 -->
                    <div class="layui-form-item">
                        <label class="layui-form-label">分类名称</label>
                        <div class="layui-input-block">
                            <input type="text" name="name" required lay-verify="required" placeholder="请输入分类名称" autocomplete="off" class="layui-input">
                        </div>
                    </div>
                    <!-- 2.分类别名 -->
                    <div class="layui-form-item">
                        <label class="layui-form-label">分类别名</label>
                        <div class="layui-input-block">
                            <input type="text" name="alias" required lay-verify="required" placeholder="请输入分类别名" autocomplete="off" class="layui-input">
                        </div>
                    </div>
                    <!-- 3.按钮 -->
                    <div class="layui-form-item">
                        <div class="layui-input-block">
                            <button class="layui-btn" lay-submit lay-filter="formDemo">确定修改</button>
                        </div>
                    </div>
                </form>
            `
        });
        // 在点击事件里面，获取id的值
        let id = $(this).attr('data-id');
        // 发送ajax
        axios({
            method: 'GET',
            // 这种参数叫做路由参数，也叫URL参数，就是写到路径中的参数！
            //   要求:  其中 :要删除  / 要保留  单词换成具体值
            url: '/my/article/cates/' + id
        }).then((res) => {
            // console.log(res.data);
            if (res.data.status != 0) {
                return layer.msg(res.data.message);
            }
            // 渲染
            layui.form.val('editForm', res.data.data);
        });
    })

    // 需求5: 修改文章分类
    $("body").on('submit', '#editForm', function (e) {
        // 阻止表单默认提交
        e.preventDefault();
        // ajax提交
        axios({
            method: 'POST',
            url: '/my/article/updatecate',
            // 参数通过data属性，传递 a=1&b=2 类型数据
            data: $(this).serialize()
        }).then((res) => {
            if (res.data.status != 0) {
                return layer.msg(res.data.message);
            }
            // 提示成功
            layer.msg('恭喜您，修改文章分类成功！');
            // 重新发送ajax渲染文章分类列表
            initArtCateList();
            // 关闭弹出层
            layer.close(indexEdit);
        });
    })

    // 需求6: 删除文章分类 - 事件委托；
    $("tbody").on('click', '.btn-dele', function () {
        // 获取自定义属性
        let id = $(this).attr('data-id');
        // 弹出询问框
        layer.confirm('确认删除吗?', {
            icon: 3,
            title: '提示'
        }, function (index) {
            // 发送ajax
            axios({
                method: 'GET',
                // 这种参数叫做路由参数，也叫URL参数，就是写到路径中的参数！
                //   要求:  其中 :要删除  / 要保留  单词换成具体值
                url: '/my/article/deletecate/' + id
            }).then((res) => {
                if (res.data.status != 0) {
                    return layer.msg(res.data.message);
                }
                // 成功提示
                layer.msg('恭喜您，删除文章分类成功！');
                // 重新渲染文章分类列表
                initArtCateList();
            });
            // 关闭弹出层
            layer.close(index);
        });
    })
});